<?php
// на основе обработчика Generic/Static, вышлет файл из файлохранилища

class Action_Community_Imagestorage extends RL_Handler
{
	public $cache_maxage = 86400; // 60*60*24 -- стуки

	public function process ()
	{
		// Рассматриваем простую ситуацию когда передан oid
		$query['imagestorage']['oid']['=='] = $this->params['image_oid'];
		
		$find_result = $this->ctx->store->find( $query );
		$image = $find_result->next();
		$image_meta = $image->data;
		
		// определим где искать файлы
		$document_root = isset($this->params["document_root"])
			? $this->ctx->rh->project_dir. $this->params["document_root"]
			:	$_SERVER['HTTP_DOCUMENT_ROOT'];
		
		// полный путь к файлу в зависимости от типа который запрашивают
		$image_name = current(explode('.', $this->params['image_type'], 2));
		$ffull_path = rtrim($image_meta['path_to_'.$image_name], '/');
	
		if (is_file($ffull_path)) {
			
			// это действительно файл
			$this->ctx->rh->useClass('RL_View');
			$view = RL_View::create($this->ctx, 'File');
			
			$view->getMeta()->setFileName($image->id.'_'.$image_name);
			$view->getMeta()->setMimeType($image_meta['mime_type']);
			if ($this->cache_maxage) $view->getMeta()->setMaxAge($this->cache_maxage);

			$view->setPath($ffull_path);

			$response = $this->rh->response;
			if (isset( $this->params['mode'] )) {
				$response->protocol->setDownloadMode(intval($this->params['mode']));
			}
			$response->setContent($view);
		} else {
			// это не файл и не директория, а что-то другое
			// возможно, этого вообще нет
			// 404
		}
	} // end of function process

} // end of class Action_Generic_Static

